const fse = require('fs-extra')
const path = require('path')
const mime = require('mime')

function stat(filedir, fileDirs) {
  try {
    let stats = fse.statSync(filedir)

    let isFile = stats.isFile();//是文件
    let isDir = stats.isDirectory();//是文件夹
    if (isFile) {
      fileDirs.push({
        type: 'file',
        path: filedir
      })
    }
    if (isDir) {
      fileDirs.push({
        type: 'folder',
        path: filedir
      })
      //   fileDisplay(filedir);//递归，如果是文件夹，就继续遍历该文件夹下面的文件
    }
  } catch (e) {
    console.warn('获取文件stats失败', e);
  }
}


'use strict';

const Service = require('egg').Service;

class FileService extends Service {
  /**
   * 文件遍历方法
   * @param filePath 需要遍历的文件路径
   */
  async fileDisplay(filePath) {
    let fileDirs = []

    //根据文件路径读取文件，返回文件列表
    return new Promise((resolve, reject) => {
      fse.readdir(decodeURI(filePath), function (err, files) {
        if (err) {
          console.warn(err)
          reject(err)
        } else {
          //遍历读取到的文件列表
          files.forEach(function (filename) {
            //获取当前文件的绝对路径
            let filedir = path.join(filePath, filename);
            //根据文件路径获取文件信息，返回一个fse.Stats对象
            stat(filedir, fileDirs)
          })

          console.log('fileDirs', filePath, fileDirs)
          resolve(fileDirs)
        }
      })
    })
  }

  async stat(filepath) {
    return new Promise((resolve, reject) => {
      try {
        let ret = {}
        ret.stats = fse.statSync(filepath)
        ret.extname = path.extname(filepath).slice(1,)
        ret.pathname = path.basename(filepath)
        ret.dirname = path.dirname(filepath)
        ret.mimeType = mime.getType(ret.extname)
        resolve(ret)
      } catch (e) {
        reject(e)
      }
    })
  }
}

module.exports = FileService;
